{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np  # 矩阵操作\n",
    "import pandas as pd  # SQL数据处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(r\"C:\\Users\\admin\\Downloads\\12345\\day.csv\")\n",
    "# 观察前5行了解数据每列（特征）的概况以及数据是否有缺失\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 16 columns):\n",
      "instant       731 non-null int64\n",
      "dteday        731 non-null object\n",
      "season        731 non-null int64\n",
      "yr            731 non-null int64\n",
      "mnth          731 non-null int64\n",
      "holiday       731 non-null int64\n",
      "weekday       731 non-null int64\n",
      "workingday    731 non-null int64\n",
      "weathersit    731 non-null int64\n",
      "temp          731 non-null float64\n",
      "atemp         731 non-null float64\n",
      "hum           731 non-null float64\n",
      "windspeed     731 non-null float64\n",
      "casual        731 non-null int64\n",
      "registered    731 non-null int64\n",
      "cnt           731 non-null int64\n",
      "dtypes: float64(4), int64(11), object(1)\n",
      "memory usage: 91.5+ KB\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>2.496580</td>\n",
       "      <td>0.500684</td>\n",
       "      <td>6.519836</td>\n",
       "      <td>0.028728</td>\n",
       "      <td>2.997264</td>\n",
       "      <td>0.683995</td>\n",
       "      <td>1.395349</td>\n",
       "      <td>0.495385</td>\n",
       "      <td>0.474354</td>\n",
       "      <td>0.627894</td>\n",
       "      <td>0.190486</td>\n",
       "      <td>848.176471</td>\n",
       "      <td>3656.172367</td>\n",
       "      <td>4504.348837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>211.165812</td>\n",
       "      <td>1.110807</td>\n",
       "      <td>0.500342</td>\n",
       "      <td>3.451913</td>\n",
       "      <td>0.167155</td>\n",
       "      <td>2.004787</td>\n",
       "      <td>0.465233</td>\n",
       "      <td>0.544894</td>\n",
       "      <td>0.183051</td>\n",
       "      <td>0.162961</td>\n",
       "      <td>0.142429</td>\n",
       "      <td>0.077498</td>\n",
       "      <td>686.622488</td>\n",
       "      <td>1560.256377</td>\n",
       "      <td>1937.211452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.059130</td>\n",
       "      <td>0.079070</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.022392</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>22.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>183.500000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.337083</td>\n",
       "      <td>0.337842</td>\n",
       "      <td>0.520000</td>\n",
       "      <td>0.134950</td>\n",
       "      <td>315.500000</td>\n",
       "      <td>2497.000000</td>\n",
       "      <td>3152.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.498333</td>\n",
       "      <td>0.486733</td>\n",
       "      <td>0.626667</td>\n",
       "      <td>0.180975</td>\n",
       "      <td>713.000000</td>\n",
       "      <td>3662.000000</td>\n",
       "      <td>4548.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>548.500000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.655417</td>\n",
       "      <td>0.608602</td>\n",
       "      <td>0.730209</td>\n",
       "      <td>0.233214</td>\n",
       "      <td>1096.000000</td>\n",
       "      <td>4776.500000</td>\n",
       "      <td>5956.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.861667</td>\n",
       "      <td>0.840896</td>\n",
       "      <td>0.972500</td>\n",
       "      <td>0.507463</td>\n",
       "      <td>3410.000000</td>\n",
       "      <td>6946.000000</td>\n",
       "      <td>8714.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          instant      season          yr        mnth     holiday     weekday  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean   366.000000    2.496580    0.500684    6.519836    0.028728    2.997264   \n",
       "std    211.165812    1.110807    0.500342    3.451913    0.167155    2.004787   \n",
       "min      1.000000    1.000000    0.000000    1.000000    0.000000    0.000000   \n",
       "25%    183.500000    2.000000    0.000000    4.000000    0.000000    1.000000   \n",
       "50%    366.000000    3.000000    1.000000    7.000000    0.000000    3.000000   \n",
       "75%    548.500000    3.000000    1.000000   10.000000    0.000000    5.000000   \n",
       "max    731.000000    4.000000    1.000000   12.000000    1.000000    6.000000   \n",
       "\n",
       "       workingday  weathersit        temp       atemp         hum   windspeed  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean     0.683995    1.395349    0.495385    0.474354    0.627894    0.190486   \n",
       "std      0.465233    0.544894    0.183051    0.162961    0.142429    0.077498   \n",
       "min      0.000000    1.000000    0.059130    0.079070    0.000000    0.022392   \n",
       "25%      0.000000    1.000000    0.337083    0.337842    0.520000    0.134950   \n",
       "50%      1.000000    1.000000    0.498333    0.486733    0.626667    0.180975   \n",
       "75%      1.000000    2.000000    0.655417    0.608602    0.730209    0.233214   \n",
       "max      1.000000    3.000000    0.861667    0.840896    0.972500    0.507463   \n",
       "\n",
       "            casual   registered          cnt  \n",
       "count   731.000000   731.000000   731.000000  \n",
       "mean    848.176471  3656.172367  4504.348837  \n",
       "std     686.622488  1560.256377  1937.211452  \n",
       "min       2.000000    20.000000    22.000000  \n",
       "25%     315.500000  2497.000000  3152.000000  \n",
       "50%     713.000000  3662.000000  4548.000000  \n",
       "75%    1096.000000  4776.500000  5956.000000  \n",
       "max    3410.000000  6946.000000  8714.000000  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.info()\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "season属性的不同取值和出现的次数\n",
      "3    188\n",
      "2    184\n",
      "1    181\n",
      "4    178\n",
      "Name: season, dtype: int64\n",
      "\n",
      "mnth属性的不同取值和出现的次数\n",
      "12    62\n",
      "10    62\n",
      "8     62\n",
      "7     62\n",
      "5     62\n",
      "3     62\n",
      "1     62\n",
      "11    60\n",
      "9     60\n",
      "6     60\n",
      "4     60\n",
      "2     57\n",
      "Name: mnth, dtype: int64\n",
      "\n",
      "weathersit属性的不同取值和出现的次数\n",
      "1    463\n",
      "2    247\n",
      "3     21\n",
      "Name: weathersit, dtype: int64\n",
      "\n",
      "weekday属性的不同取值和出现的次数\n",
      "6    105\n",
      "1    105\n",
      "0    105\n",
      "5    104\n",
      "4    104\n",
      "3    104\n",
      "2    104\n",
      "Name: weekday, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "categorical_features= ['season','mnth','weathersit','weekday']\n",
    "\n",
    "for col in categorical_features:\n",
    "    print(\"\\n%s属性的不同取值和出现的次数\"%col)\n",
    "    print(data[col].value_counts())\n",
    "    data[col]=data[col].astype('object')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weathersit_1</th>\n",
       "      <th>weathersit_2</th>\n",
       "      <th>weathersit_3</th>\n",
       "      <th>weekday_0</th>\n",
       "      <th>weekday_1</th>\n",
       "      <th>weekday_2</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6    ...      weathersit_1  weathersit_2  weathersit_3  \\\n",
       "0       0       0    ...                 0             1             0   \n",
       "1       0       0    ...                 0             1             0   \n",
       "2       0       0    ...                 1             0             0   \n",
       "3       0       0    ...                 1             0             0   \n",
       "4       0       0    ...                 1             0             0   \n",
       "\n",
       "   weekday_0  weekday_1  weekday_2  weekday_3  weekday_4  weekday_5  weekday_6  \n",
       "0          0          0          0          0          0          0          1  \n",
       "1          1          0          0          0          0          0          0  \n",
       "2          0          1          0          0          0          0          0  \n",
       "3          0          0          1          0          0          0          0  \n",
       "4          0          0          0          1          0          0          0  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train_cat = data[categorical_features]\n",
    "x_train_cat = pd.get_dummies(x_train_cat)\n",
    "x_train_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       temp     atemp       hum  windspeed\n",
       "0  0.355170  0.373517  0.828620   0.284606\n",
       "1  0.379232  0.360541  0.715771   0.466215\n",
       "2  0.171000  0.144830  0.449638   0.465740\n",
       "3  0.175530  0.174649  0.607131   0.284297\n",
       "4  0.209120  0.197158  0.449313   0.339143"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "mn_x=MinMaxScaler()\n",
    "numerical_features=['temp','atemp','hum','windspeed']\n",
    "#标准化为0-1之间的数\n",
    "temp=mn_x.fit_transform(data[numerical_features])\n",
    "\n",
    "x_train_num=pd.DataFrame(data=temp,columns=numerical_features)\n",
    "x_train_num.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "0       0       0     ...              0          0          0          1   \n",
       "1       0       0     ...              0          0          0          0   \n",
       "2       0       0     ...              0          0          0          0   \n",
       "3       0       0     ...              0          0          0          0   \n",
       "4       0       0     ...              1          0          0          0   \n",
       "\n",
       "       temp     atemp       hum  windspeed  holiday  workingday  \n",
       "0  0.355170  0.373517  0.828620   0.284606        0           0  \n",
       "1  0.379232  0.360541  0.715771   0.466215        0           0  \n",
       "2  0.171000  0.144830  0.449638   0.465740        0           1  \n",
       "3  0.175530  0.174649  0.607131   0.284297        0           1  \n",
       "4  0.209120  0.197158  0.449313   0.339143        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train=pd.concat([x_train_cat,x_train_num,data['holiday'],data['workingday']],axis=1,ignore_index=False)\n",
    "x_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5  ...   weekday_5  weekday_6      temp     atemp       hum  \\\n",
       "0       0       0  ...           0          1  0.355170  0.373517  0.828620   \n",
       "1       0       0  ...           0          0  0.379232  0.360541  0.715771   \n",
       "2       0       0  ...           0          0  0.171000  0.144830  0.449638   \n",
       "3       0       0  ...           0          0  0.175530  0.174649  0.607131   \n",
       "4       0       0  ...           0          0  0.209120  0.197158  0.449313   \n",
       "\n",
       "   windspeed  holiday  workingday  yr   cnt  \n",
       "0   0.284606        0           0   0   985  \n",
       "1   0.466215        0           0   0   801  \n",
       "2   0.465740        0           1   0  1349  \n",
       "3   0.284297        0           1   0  1562  \n",
       "4   0.339143        0           1   0  1600  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "TZ_train=pd.concat([data['instant'],x_train,data['yr'],data['cnt']],axis=1,ignore_index=False)\n",
    "#保存\n",
    "TZ_train.to_csv(r'C:\\Users\\admin\\Downloads\\12345\\TeZheng_day.csv',index=False)\n",
    "#查看前五行信心\n",
    "TZ_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 35 columns):\n",
      "instant         731 non-null int64\n",
      "season_1        731 non-null uint8\n",
      "season_2        731 non-null uint8\n",
      "season_3        731 non-null uint8\n",
      "season_4        731 non-null uint8\n",
      "mnth_1          731 non-null uint8\n",
      "mnth_2          731 non-null uint8\n",
      "mnth_3          731 non-null uint8\n",
      "mnth_4          731 non-null uint8\n",
      "mnth_5          731 non-null uint8\n",
      "mnth_6          731 non-null uint8\n",
      "mnth_7          731 non-null uint8\n",
      "mnth_8          731 non-null uint8\n",
      "mnth_9          731 non-null uint8\n",
      "mnth_10         731 non-null uint8\n",
      "mnth_11         731 non-null uint8\n",
      "mnth_12         731 non-null uint8\n",
      "weathersit_1    731 non-null uint8\n",
      "weathersit_2    731 non-null uint8\n",
      "weathersit_3    731 non-null uint8\n",
      "weekday_0       731 non-null uint8\n",
      "weekday_1       731 non-null uint8\n",
      "weekday_2       731 non-null uint8\n",
      "weekday_3       731 non-null uint8\n",
      "weekday_4       731 non-null uint8\n",
      "weekday_5       731 non-null uint8\n",
      "weekday_6       731 non-null uint8\n",
      "temp            731 non-null float64\n",
      "atemp           731 non-null float64\n",
      "hum             731 non-null float64\n",
      "windspeed       731 non-null float64\n",
      "holiday         731 non-null int64\n",
      "workingday      731 non-null int64\n",
      "yr              731 non-null int64\n",
      "cnt             731 non-null int64\n",
      "dtypes: float64(4), int64(5), uint8(26)\n",
      "memory usage: 70.0 KB\n"
     ]
    }
   ],
   "source": [
    "TZ_train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\admin\\Anaconda3\\lib\\site-packages\\sklearn\\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "#数据读取以及基本处理\n",
    "#import pandas as pd #数据处理\n",
    "#import numpy as np #矩阵操作\n",
    "\n",
    "#引入模型：最小二乘线性回归，领回归（L2正则），Lasso(L1正则）\n",
    "from sklearn.linear_model import LinearRegression,RidgeCV,LassoCV   #,ElasticNetCV\n",
    "from sklearn import datasets\n",
    "import numpy as np\n",
    "from sklearn.cross_validation import train_test_split\n",
    "#模型评估\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import r2_score #评价回归预测模型的性能\n",
    "\n",
    "#画图\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5  ...   weekday_5  weekday_6      temp     atemp       hum  \\\n",
       "0       0       0  ...           0          1  0.355170  0.373517  0.828620   \n",
       "1       0       0  ...           0          0  0.379232  0.360541  0.715771   \n",
       "2       0       0  ...           0          0  0.171000  0.144830  0.449638   \n",
       "3       0       0  ...           0          0  0.175530  0.174649  0.607131   \n",
       "4       0       0  ...           0          0  0.209120  0.197158  0.449313   \n",
       "\n",
       "   windspeed  holiday  workingday  yr   cnt  \n",
       "0   0.284606        0           0   0   985  \n",
       "1   0.466215        0           0   0   801  \n",
       "2   0.465740        0           1   0  1349  \n",
       "3   0.284297        0           1   0  1562  \n",
       "4   0.339143        0           1   0  1600  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读入数据\n",
    "data_tezheng = pd.read_csv(r\"C:\\Users\\admin\\Downloads\\12345\\TeZheng_Day.csv\")\n",
    "#查看数据\n",
    "data_tezheng.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#百分之80作为训练数据\n",
    "y=data_tezheng['cnt']\n",
    "X=data_tezheng.drop('cnt',axis=1)\n",
    "X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)\n",
    "#train=data_tezheng[data_tezheng.yr==0] #训练数据\n",
    "#train.drop(['instant','yr'],axis=1,inplace=True)\n",
    "#print(\"train（训练）:\"+str(train.shape))\n",
    "\n",
    "#百分之20作为测试数据\n",
    "#test=data_tezheng[data_tezheng.yr==1] #测试数据\n",
    "#取testID备份留作后用\n",
    "#testID=test['instant']\n",
    "#testCNT=test['cnt']\n",
    "#test.drop(['instant','yr'],axis=1,inplace=True)\n",
    "#print(\"test（测试）:\"+str(test.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "0       0       0     ...              0          0          0          1   \n",
       "1       0       0     ...              0          0          0          0   \n",
       "2       0       0     ...              0          0          0          0   \n",
       "3       0       0     ...              0          0          0          0   \n",
       "4       0       0     ...              1          0          0          0   \n",
       "\n",
       "       temp     atemp       hum  windspeed  holiday  workingday  \n",
       "0  0.355170  0.373517  0.828620   0.284606        0           0  \n",
       "1  0.379232  0.360541  0.715771   0.466215        0           0  \n",
       "2  0.171000  0.144830  0.449638   0.465740        0           1  \n",
       "3  0.175530  0.174649  0.607131   0.284297        0           1  \n",
       "4  0.209120  0.197158  0.449313   0.339143        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.387359</td>\n",
       "      <td>0.389264</td>\n",
       "      <td>0.712082</td>\n",
       "      <td>0.350001</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>366</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.266546</td>\n",
       "      <td>0.227394</td>\n",
       "      <td>0.392086</td>\n",
       "      <td>0.633460</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>367</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.113228</td>\n",
       "      <td>0.061963</td>\n",
       "      <td>0.453728</td>\n",
       "      <td>0.707688</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.060271</td>\n",
       "      <td>0.052856</td>\n",
       "      <td>0.426306</td>\n",
       "      <td>0.334607</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>369</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.257562</td>\n",
       "      <td>0.261664</td>\n",
       "      <td>0.538989</td>\n",
       "      <td>0.221813</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "365         1         0         0         0       1       0       0       0   \n",
       "366         1         0         0         0       1       0       0       0   \n",
       "367         1         0         0         0       1       0       0       0   \n",
       "368         1         0         0         0       1       0       0       0   \n",
       "369         1         0         0         0       1       0       0       0   \n",
       "\n",
       "     mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "365       0       0     ...              0          0          0          0   \n",
       "366       0       0     ...              0          0          0          0   \n",
       "367       0       0     ...              0          0          0          0   \n",
       "368       0       0     ...              1          0          0          0   \n",
       "369       0       0     ...              0          1          0          0   \n",
       "\n",
       "         temp     atemp       hum  windspeed  holiday  workingday  \n",
       "365  0.387359  0.389264  0.712082   0.350001        0           0  \n",
       "366  0.266546  0.227394  0.392086   0.633460        1           0  \n",
       "367  0.113228  0.061963  0.453728   0.707688        0           1  \n",
       "368  0.060271  0.052856  0.426306   0.334607        0           1  \n",
       "369  0.257562  0.261664  0.538989   0.221813        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_train的均值mean_y： 3405.7616438356163\n",
      "y_train的标准差std_y： 1378.7536658345593\n",
      "标准化后的均值差异: 1.5914175510574313\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "mean_y=y_train.mean()#原数据的均值\n",
    "print(\"y_train的均值mean_y：\",mean_y)\n",
    "\n",
    "std_y=y_train.std()#原数据的标准差\n",
    "print(\"y_train的标准差std_y：\",std_y)\n",
    "\n",
    "y_train=(y_train-mean_y)/std_y#标准化后的y_train\n",
    "y_test=(y_test-mean_y)/std_y #标准化后的y_test\n",
    "\n",
    "#标准化y_test的均值\n",
    "mean_test_y=y_test.mean()\n",
    "mean_diff=mean_test_y;\n",
    "print(\"标准化后的均值差异:\",mean_diff)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "#1.生成学习器实例\n",
    "lr=LinearRegression()\n",
    "#2.在训练集上训练学习器\n",
    "lr.fit(X_train,y_train)\n",
    "\n",
    "#3.训练集测试，测试集测试\n",
    "y_train_pred=lr.predict(X_train)#训练集预测\n",
    "y_test_pred=lr.predict(X_test)#测试集预测\n",
    "y_test_pred+=mean_diff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集RMSE: 0.4016589377625674\n",
      "测试集RMSE: 0.7470194300123973\n"
     ]
    }
   ],
   "source": [
    "#RMSE性能测试\n",
    "rmse_train=np.sqrt(mean_squared_error(y_train,y_train_pred))#训练集上的均方误差根，衡量观测值同真值之间的偏差\n",
    "rmse_test=np.sqrt(mean_squared_error(y_test,y_test_pred))#测试集上的均方误差根，衡量观测值同真值之间的偏差\n",
    "print(\"训练集RMSE:\",rmse_train)\n",
    "print(\"测试集RMSE:\",rmse_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集r2_score: 0.8382268836981808\n",
      "测试集r2_score: 0.6675196624795474\n"
     ]
    }
   ],
   "source": [
    "#r2_score性能测试\n",
    "r2_score_train=r2_score(y_train,y_train_pred)#训练集拟合度\n",
    "r2_score_test=r2_score(y_test,y_test_pred)#测试集拟合度\n",
    "print(\"训练集r2_score:\",r2_score_train)\n",
    "print(\"测试集r2_score:\",r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid character in identifier (<ipython-input-28-2d7a2ecbab85>, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  File \u001b[1;32m\"<ipython-input-28-2d7a2ecbab85>\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m    训练集上好一些，测试集上差一些。\u001b[0m\n\u001b[1;37m                   ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid character in identifier\n"
     ]
    }
   ],
   "source": [
    "#训练集上好一些，测试集上差一些。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳的超参alpha: 1.0\n",
      "cv of rmse: 0.43446097786716104\n",
      "训练集RMSE: 0.40016458243630365\n",
      "测试集RMSE: 0.7508464827064623\n",
      "训练集r2_score: 0.8394283847299622\n",
      "测试集r2_score: 0.6641042783948103\n"
     ]
    }
   ],
   "source": [
    "#1.生成学习器实例\n",
    "alphas=[0.01,0.1,1,10,100,1000]\n",
    "ridge=RidgeCV(alphas=alphas,store_cv_values=True)\n",
    "\n",
    "#2.用训练数据度模型进行训练\n",
    "ridge.fit(X_train,y_train)\n",
    "\n",
    "#通过交叉验证得到的最佳超参数alpha\n",
    "alpha=ridge.alpha_\n",
    "print(\"最佳的超参alpha:\",alpha)\n",
    "\n",
    "#交叉验证估计的测试误差\n",
    "mse_cv=np.mean(ridge.cv_values_,axis=0)\n",
    "rmse_cv=np.sqrt(mse_cv)\n",
    "print(\"cv of rmse:\",min(rmse_cv))\n",
    "\n",
    "#训练上测试，训练误差\n",
    "y_train_pred=ridge.predict(X_train)\n",
    "rmse_train=np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "#测试上测试，测试误差\n",
    "y_test_pred = ridge.predict(X_test)\n",
    "y_test_pred+=mean_diff\n",
    "rmse_test=np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"训练集RMSE:\",rmse_train)\n",
    "print(\"测试集RMSE:\",rmse_test)\n",
    "\n",
    "r2_score_train=r2_score(y_train,y_train_pred)#训练集拟合度\n",
    "r2_score_test=r2_score(y_test,y_test_pred)#测试集拟合度\n",
    "print(\"训练集r2_score:\",r2_score_train)\n",
    "print(\"测试集r2_score:\",r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "收取32个特征，并 消除了 0个特征\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制重要系数\n",
    "coefs=pd.Series(ridge.coef_,index=X_train.columns)#Wj\n",
    "print(\"收取\"+str(sum(coefs!=0))+\"个特征，并 消除了\",str(sum(coefs==0))+\"个特征\")\n",
    "\n",
    "#正系数值最大的10个特征和负系数最小值(绝对值大)的10个特征\n",
    "imp_coefs=pd.concat([coefs.sort_values().head(10),coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind=\"barh\")\n",
    "plt.title(\"Coefficients in the Ridge Model\")\n",
    "plt.show()\n",
    "\n",
    "mse_mean=np.mean(ridge.cv_values_,axis=0)\n",
    "plt.plot(np.log10(alphas),mse_mean.reshape(len(alphas),1))\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳超参alpha: 0.0005827919419717718\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cv of rmse: 0.6611882945782958\n",
      "Lasso模型收取26个特征，并 消除了 6个特征\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集RMSE: 0.3987718352033184\n",
      "测试集RMSE: 0.748177853215867\n",
      "训练集r2_scor: 0.8405441581283812\n",
      "测试集r2_socre: 0.6664876904699157\n"
     ]
    }
   ],
   "source": [
    "#生成学习器实例\n",
    "lasso=LassoCV()\n",
    "#训练\n",
    "lasso.fit(X_train,y_train)\n",
    "#超参\n",
    "alpha=lasso.alpha_\n",
    "print(\"最佳超参alpha:\",alpha)\n",
    "\n",
    "mses=np.mean(lasso.mse_path_,axis=1)\n",
    "plt.plot(np.log10(lasso.alphas_),mses)\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "mse_cv=np.mean(lasso.mse_path_,axis=1)\n",
    "rmse_cv=np.sqrt(mse_cv)\n",
    "print(\"cv of rmse:\",min(rmse_cv))\n",
    "\n",
    "#绘制重要系数\n",
    "coefs=pd.Series(lasso.coef_,index=X_train.columns)#Wj\n",
    "print(\"Lasso模型收取\"+str(sum(coefs!=0))+\"个特征，并 消除了\",str(sum(coefs==0))+\"个特征\")\n",
    "#正系数值最大的10个特征和负系数最小值(绝对值大)的10个特征\n",
    "imp_coefs=pd.concat([coefs.sort_values().head(10),coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind=\"barh\")\n",
    "plt.title(\"Coefficients in the Lasso Model\")\n",
    "plt.show()\n",
    "\n",
    "mses=np.mean(lasso.mse_path_,axis=1)\n",
    "plt.plot(np.log10(lasso.alphas_),mses)\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "y_train_pred=lasso.predict(X_train)\n",
    "rmse_train=np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "print(\"训练集RMSE:\",rmse_train)\n",
    "\n",
    "y_test_pred = lasso.predict(X_test)\n",
    "y_test_pred+=mean_diff\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"测试集RMSE:\",rmse_test)\n",
    "\n",
    "r2_score_train=r2_score(y_train,y_train_pred)\n",
    "r2_score_test=r2_score(y_test,y_test_pred)\n",
    "print(\"训练集r2_scor:\",r2_score_train)\n",
    "print(\"测试集r2_socre:\",r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
